#!/usr/bin/python
#coding:utf-8
#Projeto Locadora

import wx
import wx.lib.mixins.listctrl  as  listmix
import sys
import time
from RepositorioCliente import*
from window_Atualizar import*

        
#----------------------------------------------------------------------
class Log:
    r"""\informar necessarios pelo wxdemos.
     A saida de log eh redirecionado para o bar do quadro contendo estado.
    """

    def WriteText(self,text_string):
        self.write(text_string)

    def write(self,text_string):
        wx.GetApp().GetTopWindow().SetStatusText(text_string)

#----------------------------------------------------------------------
# O painel que você deseja testar (TestVirtualList)
#----------------------------------------------------------------------

class TestVirtualList(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.ColumnSorterMixin):
    def __init__(self, parent,log,Lista):
        wx.ListCtrl.__init__( self, parent, -1, style=wx.LC_REPORT|wx.LC_VIRTUAL|wx.LC_HRULES|wx.LC_VRULES)
        self.log=log 

        #Criar Um Dicionario
        Repositorio = RepositorioCliente(-1,-1)
        self.lista_Clientes = Lista
        #Dados_Atualizar = (Nome,Cidade,Vara,Num Processo,Fase)
        Dados_Atualizar=Repositorio.CriaDicionario(self.lista_Clientes)

        #Adicionar Figura Up e Down
        self.il = wx.ImageList(16, 16)
        a={"sm_up":"GO_UP","sm_dn":"GO_DOWN"}
        for k,v in a.items():
            s="self.%s= self.il.Add(wx.ArtProvider_GetBitmap(wx.ART_%s,wx.ART_TOOLBAR,(16,16)))" % (k,v)
            exec(s)
        self.SetImageList(self.il, wx.IMAGE_LIST_SMALL)


        #Construir as Colunas
        self.InsertColumn(0, "Nome")
        self.InsertColumn(1, "Cidade")
        self.InsertColumn(2, "Vara")
        self.InsertColumn(3, u"Nº Processo")
        self.InsertColumn(4, u"Fase")
        self.SetColumnWidth(0, 150)
        self.SetColumnWidth(1, 220)
        self.SetColumnWidth(2, 100)
        self.SetColumnWidth(3, 170)
        self.SetColumnWidth(4, 150)

        #Esses dois provavelmente deve ser passados ​​para o init mais limpa
        #Definindo o numero de itens = numero de elementos no dicionario
        self.itemDataMap = Dados_Atualizar
        self.itemIndexMap = Dados_Atualizar.keys()
        self.SetItemCount(len(Dados_Atualizar))
        
        #mixins
        listmix.ListCtrlAutoWidthMixin.__init__(self)
        listmix.ColumnSorterMixin.__init__(self, 2)

        #Ordenar por Cidade (coluna 1), A->Z Ordem ascendente (0)
        self.SortListItems(0, 0)

        #Eventos
        self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected)
        self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated)
        self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColClick)


    def OnColClick(self,event):
        event.Skip()

    def OnItemSelected(self, event):
        print "Select"
                    
    def OnItemActivated(self, event): 
        index = 0
        for pos in self.itemIndexMap:
            if self.GetFocusedItem() == index:
                Lista_Dados = self.lista_Clientes[pos]
            index+=1 
        
        Atulizar=AtualizarDados(self,-1,"Atualizar Dados",Lista_Dados)
        Atulizar.ShowModal()
        Atulizar.Destroy()

    def getColumnText(self, index, col):
        item = self.GetItem(index, col)
        return item.GetText()

    #---------------------------------------------------
    # Estes métodos são chamadas de retorno para a execução do
    # "virtualness" para a lista...

    def OnGetItemText(self, item, col):
        index=self.itemIndexMap[item]
        s = self.itemDataMap[index][col]
        return s


    def SortItems(self,sorter=cmp):
        items = list(self.itemDataMap.keys())
        items.sort(sorter)
        self.itemIndexMap = items
        
        # redefinir a lista
        self.Refresh()

    # Usado pelo ColumnSorterMixin, consulte wx/lib/mixins/listctrl.py
    def GetListCtrl(self):
        return self

    # Usado pelo ColumnSorterMixin, consulte wx/lib/mixins/listctrl.py
    def GetSortImages(self):
        return (self.sm_dn, self.sm_up)


class Janela_Atualizar(wx.Frame):
    def __init__(self, parent, id, title,Lista,style = wx.WS_EX_PROCESS_UI_UPDATES):
        wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(550, 350))

        self.CreateStatusBar(1)

        log=Log()
        self.Lista = Lista
        self.win = TestVirtualList(self, log,self.Lista)

